import { checkVersion } from '../vendor/api'
function util(mui) {
    var aniShow = {};
    var activePage = null
    
    var util = {
      options: {
          active_color: '#007aff',
          normal_color: '#5e5e5e',
          subpages: ['/home/build_index.html', '/home/serve_index.html'],
          subpages_login: ['/home/build_index.html', '/home/serve_index.html', '/home/user_index.html']
      },
      /**
       *  简单封装了绘制原生view控件的方法
       *  绘制内容支持font（文本，字体图标）,图片img , 矩形区域rect
       */
      drawNative: function (id, styles, tags) {
          var view = new plus.nativeObj.View(id, styles, tags);
          return view;
      },
      /**
       * 初始化首个tab窗口 和 创建子webview窗口
       */
      initSubpage: function () {
          var subpage_style = {
                  top: '0px',
                  bottom: '51px'
              },
              subpages = util.options.subpages,
              self = plus.webview.getLaunchWebview(),
              temp = {};
              var access_token = plus.storage.getItem('access_token');
              if (access_token) {
                  subpages = util.options.subpages_login;
              }
          //兼容安卓上添加titleNView 和 设置沉浸式模式会遮盖子webview内容
          if(mui.os.android) {
              if(plus.navigator.isImmersedStatusbar()) {
                  subpage_style.top += plus.navigator.getStatusbarHeight();
              }
              if(self.getTitleNView()) {
                  subpage_style.top += 40;
              }
          }
          // 初始化第一个tab项为首次显示
          temp[self.id] = "true";
          mui.extend(aniShow, temp);
          // 初始化绘制首个tab按钮
          util.toggleNview(self.getStyle().subNViews[0], 0);
          for (var i = 0, len = subpages.length; i < len; i++) {
              if (!plus.webview.getWebviewById(subpages[i])) {
                  var sub = plus.webview.create(subpages[i], subpages[i], subpage_style);
                  //初始化隐藏
                  sub.hide();
                  // append到当前父webview
                  self.append(sub);
              }
          }
      },
      /**
       * 点击切换tab窗口
       */
      changeSubpage: function (targetPage, activePage) {
          //若为iOS平台或非首次显示，则直接显示
          if (mui.os.ios || aniShow[targetPage]) {
              plus.webview.show(targetPage);
          } else {
              //否则，使用fade-in动画，且保存变量
              var temp = {};
              temp[targetPage] = "true";
              mui.extend(aniShow, temp);
              plus.webview.show(targetPage, "fade-in", 300);
          }
          //隐藏当前 除了第一个父窗口
          if (activePage !== plus.webview.getLaunchWebview()) {
              plus.webview.hide(activePage);
          } else {
              plus.webview.getLaunchWebview().getTitleNView().hide()
          }
          if (targetPage === plus.webview.getLaunchWebview()) {
              plus.webview.getLaunchWebview().getTitleNView().show()
          }
      },
      /**
       * 点击重绘底部tab （view控件）
       */
      toggleNview: function (currObj, currIndex) {
          var self = plus.webview.getLaunchWebview();
          // var activeArr = ['\ue60a', '\ue603', '\ue505', '\ue651', '\ue627']
          var activeArr = ['\ue60a', '\ue603', '\ue505', '\ue627']
          
          var i = parseInt(currObj.id.substring(6,7)) - 1 
          // 重绘当前nview
          self.updateSubNViews([{
              id: currObj.id,
              tags: [{
                  tag: 'font', //currObj.tag
                  id: currObj.id + 1,
                  position: currObj.tags[0].position,
                  text: activeArr[i],
                  textStyles: util.changeColor(currObj.tags[0].textStyles, util.options.active_color)
              }, {
                  tag: 'font',
                  id: currObj.id + 2,
                  position: currObj.tags[1].position,
                  text: currObj.tags[1].text,
                  textStyles: util.changeColor(currObj.tags[1].textStyles, util.options.active_color)
              }]
          }])
  
          // 重绘兄弟nview
          for (var i = 0; i < 4; i++) {
              var viewObj = self.getStyle().subNViews[i];
              if (i !== currIndex) {
                  util.updateSubNView(viewObj);
              }
          }
      },
      /*
       * 改变颜色
       */
      changeColor: function (obj, color) {
          obj.color = color;
          return obj
      },
      /*
       * 利用 webview 提供的 updateSubNViews 方法更新 view 控件
       */
      updateSubNView: function (obj) {
          var self = plus.webview.getLaunchWebview();
          self.updateSubNViews([{
              id: obj.id,
              tags: [{
                  tag: 'font', //此处直接赋值因为已知需要更新的tag 类型，不是固定值，请注意
                  id: obj.id + 1,
                  position: obj.tags[0].position,
                  text: obj.tags[0].text,
                  textStyles: util.changeColor(obj.tags[0].textStyles, util.options.normal_color)
              }, {
                  tag: 'font',
                  id: obj.id + 2,
                  position: obj.tags[1].position,
                  text: obj.tags[1].text,
                  textStyles: util.changeColor(obj.tags[1].textStyles, util.options.normal_color)
              }]
          }]);
      },
      update: function () {
        var type = null;
        if (mui.os.ios) {
            type = 'ios';
        } else {
            type = 'android';
        }
        var seedData = {
            "appId": plus.runtime.appid, // 当前应用的APPID
            "version": plus.runtime.version, // 客户端版本号
            "imei": plus.device.imei, // 设备的国际移动设备身份码
            "type": type, // 系统类型
        }
        // app版本更新检查
        checkVersion(seedData).then(res => {
            if (res.data.status) {
                var button = ["立即更新", "取消"];
                if (res.data.force === 1) {
                    button = ["立即更新"];
                }
                plus.ui.confirm(res.data.note, function (i) {
                    if (0 === i.index) {
                        plus.runtime.openURL(res.data.url);
                    }
                }, res.data.version, button);
            }
        })
    },
      initIndex: function () {
          //创建子webview窗口 并初始化
          util.initSubpage();
          this.update()
          // 获取index对象
          var self = plus.webview.getLaunchWebview(),
              nviews = self.getSubNViews(),
              subpages = util.options.subpages;
          activePage = plus.webview.currentWebview();
          //给每个view 添加监听点击切换
          console.log(JSON.stringify(nviews))
          for (var i = 0; i < 5; i++) {
              nviews[i].addEventListener('click', clickEvent, false);
          }
          // 自定义 tab 点击事件
          var targetPage
          function clickEvent(e) {
              var targetId = e.target.id,
                  targetIndex = parseInt(targetId.substr(targetId.length - 1, 1) - 1),
                  targetView = self.getStyle().subNViews[targetIndex];
                  // console.log('targetIndex', targetIndex)
              // 匹配对应tab窗口
              if (targetIndex > 0) {
                  targetPage = plus.webview.getWebviewById(subpages[targetIndex - 1]);
                  if (!targetPage) targetPage = plus.webview.getWebviewById(subpages[2]);
              } else {
                  targetPage = plus.webview.getLaunchWebview();
              }
              if (targetId === 'tabBar4') {
                  // 根据是否有token 判断是否跳转到登录页面
                  var access_token = plus.storage.getItem('access_token');
                  // 如果为空跳转登录页面
                  if (!access_token) {
                      plus.webview.getWebviewById('login_new.html').show('slide-in-bottom', 200);
                      return false;
                  }
                  targetPage = plus.webview.getWebviewById('/home/user_index.html');
                  if (!targetPage) {
                      
                  }
              }
              if (targetPage == activePage) {
                  return;
              }
              // 底部选项卡切换
              util.toggleNview(targetView, targetIndex);
              // 子页面切换
              util.changeSubpage(targetPage, activePage);
              // 更改当前活跃的页面
              activePage = targetPage;
          }
  
          /**
           * 添加首页的全局事件监听
           */
          window.addEventListener('changeTab', function (event) {
              console.log('event', JSON.stringify(event))
              var tab = event.detail.tab;
              var targetPage
             
              var currPage = plus.webview.currentWebview();
  
              var targetView = self.getStyle().subNViews[tab - 1];
  
              // 如果不存在角色值 走正常的切换逻辑
              var subPageIndex = subpages[tab - 2];
              if (!subPageIndex) {
                  targetPage = plus.webview.getLaunchWebview(); // 首页
              } else {
                  targetPage = plus.webview.getWebviewById(subPageIndex); // 其他页
              }
  
              if (tab === 4) {
                  // 根据是否有token 判断是否跳转到登录页面
                  var access_token = plus.storage.getItem('access_token');
                  if (!access_token) {
                      targetPage = plus.webview.getWebviewById('login_new.html');
                  } else {
                      targetPage = plus.webview.create('/home/user_index.html', '/home/user_index.html')
                      self.append(targetPage)
                  }
              }
              // 切换底部导航
              util.toggleNview(targetView, tab - 1);
              // 切换页面
              util.changeSubpage(targetPage, currPage);
              // 将全局的当前页面 改为这一步的目标页面
              activePage = targetPage;
          });
  
          /**
           * 退出
           */
          window.addEventListener('login_out', function (event) {
              var targetView = self.getStyle().subNViews[0];
              var targetPage = plus.webview.getLaunchWebview();
              var currPage = plus.webview.getWebviewById('/home/user_index.html');
              // 切换底部导航
              util.toggleNview(targetView, 0);
                // 切换页面
              util.changeSubpage(targetPage, currPage);
              // 将全局的当前页面 改为这一步的目标页面
              activePage = targetPage;
              currPage.close()
          });
      }
    };
    return util
  }
  export default util
